package com.mycompany.mvc.utils;

import com.mycompany.mvc.config.SystemConfig;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

/**
 * Created by Jintao_Ma on 2017/9/1.
 */
public class SystemUtil {

    /**@decription
     * 判断对象是否为null
     * */
    public static boolean isNull(Object object){
        return null == object? true:false;
    }

    /**@decription
     * 判断对象是否为not null
     * */
    public static boolean isNotNull(Object object){
        return !isNull(object);
    }

    /**@decription
     * 获得系统路径
     */
    public static String systemPath = SystemConfig.getProperty("systemPath");

    /**@description
     * 仅适用于没有加MultipartResorver配置的情况下
     * */
    public static String uploadFile(HttpServletRequest request){
        String filePath = "";
//      String savePath = "/data/www/bm"
		String savePath = "C:/"+"testpic/";
        File file = new File(savePath);
        if (!file.exists() && !file.isDirectory()) {
            file.mkdir();
        }
        try {
            // 使用Apache文件上传组件处理文件上传步骤：
            // 1、创建一个DiskFileItemFactory工厂
            DiskFileItemFactory factory = new DiskFileItemFactory();
            // 2、创建一个文件上传解析器
            ServletFileUpload upload = new ServletFileUpload(factory);
            // 解决上传文件名的中文乱码
            upload.setHeaderEncoding("utf-8");
            // 3、判断提交上来的数据是否是上传表单的数据
            if (!ServletFileUpload.isMultipartContent(request)) {
                // 按照传统方式获取数据
                return null;
            }
            // 4、使用ServletFileUpload解析器解析上传数据，解析结果返回的是一个List<FileItem>集合，每一个FileItem对应一个Form表单的输入项
            List<FileItem> list = upload.parseRequest(request);
            for (FileItem item : list) {
                String fileName = DateUtil.dateToStr("yyyyMMddHHmmssS", new Date())+Math.random();
                // 如果fileitem中封装的是普通输入项的数据
                if (item.isFormField()) {
                    //String name = item.getFieldName();
                    // 解决普通输入项的数据的中文乱码问题
                    //String value = item.getString("GBK");
                    //System.out.println(name + "=" + value);
                } else {// 如果fileitem中封装的是上传文件
                    // 得到上传的文件名称，
                    String filename = item.getName();
                    if (filename == null || "".equals(filename.trim())) {
                        continue;
                    }
                    String fileSuffix = filename.substring(filename.lastIndexOf("."),filename.length());
                    // 获取item中的上传文件的输入流
                    InputStream in = item.getInputStream();
                    // 创建一个文件输出流
                    FileOutputStream out = new FileOutputStream(savePath + File.separator + fileName + fileSuffix);
                    filePath = savePath + File.separator + fileName + fileSuffix;
//					filePath = "F:/"+"export/"+fileName+fileSuffix;
                    // 创建一个缓冲区
                    byte buffer[] = new byte[1024];
                    // 判断输入流中的数据是否已经读完的标识
                    int len = 0;
                    // 循环将输入流读入到缓冲区当中，(len=in.read(buffer))>0就表示in里面还有数据
                    while ((len = in.read(buffer)) > 0) {
                        out.write(buffer, 0, len);
                    }
                    in.close();
                    out.close();
                }
            }
            return filePath;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String saveFile(MultipartFile multipartFile,HttpServletRequest request) {
        String savePath = "";
        // 判断文件是否为空
        if (!multipartFile.isEmpty()) {
            try {
                // 文件保存路径
                String filePathOld = "C:/Majintao/upload/";
                String picName = DateUtil.dateToStr("yyyyMMddHHmmssS", new Date())+
                        "_"+Math.random()+
                        "_"+ multipartFile.getOriginalFilename();
                String filePath =  filePathOld+picName;
                File file = new File(filePathOld);
                if (!file.exists() && !file.isDirectory()) {
                    file.mkdir();
                }
                // 转存文件
                multipartFile.transferTo(new File(filePath));
                //由于tomcat的server.xml设置了context,所以这里保存的是/file+
                String filePathNew = systemPath+"/file/";
                savePath = filePathNew + picName;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return savePath;
    }

}
